package com.cskaoyan.javase.oop.basic;

/**
 * @description: 面向对象第一步
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 面向对一步：创建类
 * 约定：为了方便大家看代码，把多个类写在一个java文件
 *      多个类写在同一个java文件中，是同包的关系
 * 正常开发：定义一个学生类 是独立的Java文件，但是不利于上课大家看代码
 *
 * 成员变量：处在类的成员位置的变量
 * 处在方法体外部，类体中，都是成员位置
 *
 * 成员方法：处在成员位置的方法
 * 今天要讲的成员方法，属于对象，不能加static
 *
 * 现在我们的学生类已经定义好了，需要创建对象
 * 创建对象的语法：
 * 类名 对象名 = new 类名();
 *
 * 我已经有对象，我想做一些事情
 * 1，获取对象的属性
 * 语法： 对象名.属性名
 * 改变属性值
 * 2，调用对象的方法
 *
 *
 * ​	1，类中没有的属性和行为，对象是不可能有的。
 * ​	2，对象之间互相隔离，是独立的个体。
 *
 *
 */
public class Demo {
    //成员位置

    public static void main(String[] args) {
        //创建Student类的对象
        Student s = new Student();
        //使用new关键字在哪里创建对象？
        //堆上的对象具有默认初始值
        //获取对象的属性
        System.out.println(s.age); //0
        System.out.println(s.id); //0
        System.out.println(s.name);//null
        System.out.println(s);
        //com.cskaoyan.javase.oop.basic.Student@1540e19d
        //@1540e19d对象的地址值
        //com.cskaoyan.javase.oop.basic.Student
        //叫做类的“全限定类名” 这个东西的作用：可以唯一的确定一个类

        //再创建一个学生类对象
        Student s2 = new Student();
        System.out.println(s2);

        //改变属性值
        s2.name = "张三";
        s2.age = 18;
        System.out.println(s2.name);
        System.out.println(s2.age);

        //调用方法
        //思考：study方法能够直接访问吗？
        //study方法称之为普通成员方法
        //普通成员方法不加static的方法 属于对象
        //必须通过对象去调用
        s2.study();

    }
    /*也是成员方法
    public static void test(){

    }*/
}

//Duplicate class found in the file 'E:\idea_space\29th\oop\src\com\cskaoyan\javase\oop\basic\Student.java'
class Student {
    public static void main(String[] args) {
        //study();
    }

    //1，用成员变量描述对象的外貌的共性 ----> 属性
    String name;
    int age;
    int id;

    //2，用成员方法描述对象的行为的共性 ----> 行为
    public void study() {
        System.out.println("good good study and day day up!");
    }

}
